<?php

// 公共函数库

/**
 * *
* 文件上传处理函数
* @param string filename 要上传的的表单项目名
* @param string $path 上传文件的保存路径
* @param array 允许的文件类型
* @return array 两个单元： ["error"] false 失败 ， true 成功
*                         ["info"] 存放失败的原因或者成功的文件名
*/

function uploadFile($filename,$path,$typelist=null){
  // 1.获取上传的文件名
  $upfile = $_FILES[$filename];
  if(empty($typelist)){
    $typelist = array("image/gif","image/jpg","image/jpeg","image/png"); // 允许的文件类型
  }
  // $path = "upload3" ; // 指定文件的保存路径（相对的）
  $res = array("error"=>false); // 存放返回的结果
  // 2.过滤上传文件的错误号
  if($upfile['error']>0){
    switch ($upfile['error']) {
      case 1:
        $res["info"] = "上传的文件超过了php.ini 中upload_max_filesize 选项限制";
        break;
      case 2:
        $res["info"] = "上传的文件超过了HTML表单中MAX_FILE_SIZE 选项";
        break;
      case 3:
        $res["info"] = "文件只有部分被上传";
        break;
      case 4:
        $res["info"] = "没有文件被上传";
        break;
      case 6:
        $res["info"] = "找不到临时文件夹";
        break;
      case 7:
        $res["info"] = "文件写入失败";
        break;
      default:
        $res["info"] = "未知错误";
        break;
    }
    return $res;
  }

  // 3.本次文件大小的限制
  if($upfile['size']>1000000){
    $res['info'] = "文件上传过大";
    return $res;
  }

  // 4.过滤类型
  if(!in_array($upfile["type"],$typelist)){
    $res['info'] ="上传文件类型不符!".$upfile['type'];
    return $res;
  }

  // 5.初始化信息（为图片产生一个随机的名字）
  $fileinfo = pathinfo($upfile['name']);
  do{
    $newfile = date('YmdHis').rand(1000,9999).".".$fileinfo['extension']; // 随机产生一个文件的名字
  }while(file_exists($newfile));

  // 6.执行文件上传处理
  if(is_uploaded_file($upfile['tmp_name'])){
    if(move_uploaded_file($upfile['tmp_name'],$path."/".$newfile)){
      // 将上传成功后的的文件名赋给数组
      $res['info'] = $newfile;
      $res['error'] = true;
      return $res;
    }else{
      $res['info'] = "文件上传失败";
    }
  }else {
    $res['info'] = "不是一个上传的文件";
  }

  return $res;

}

//=======================================================================================//


/**
 * *
 *等比缩放
 * @param unknown_type $srcImage   源图片路径
 * @param unknown_type $imgname    原图片名称
 * @param unknown_type $toFile     目标图片路径
 * @param unknown_type $maxWidth   最大宽
 * @param unknown_type $maxHeight  最大高
 * @param unknown_type $imgQuality 图片质量
 * @return unknown
 */

function resizeImage($srcImage,$imgname,$toFile,$maxWidth = 100,$maxHeight = 100,$imgQuality=100)
{

    list($width, $height, $type, $attr) = getimagesize($srcImage);
    if($width < $maxWidth  || $height < $maxHeight) return ;
    switch ($type) {
        case 1: $img = imagecreatefromgif($srcImage); break;
        case 2: $img = imagecreatefromjpeg($srcImage); break;
        case 3: $img = imagecreatefrompng($srcImage); break;
    }
    $scale = min($maxWidth/$width, $maxHeight/$height); //求出绽放比例

    if($scale < 1) {
        $newWidth = floor($scale*$width);
        $newHeight = floor($scale*$height);
        $newImg = imagecreatetruecolor($newWidth, $newHeight);
        imagecopyresampled($newImg, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
        $newName = "small_".preg_replace("/(.gif|.jpg|.jpeg|.png)/i","",$imgname);
        $toFile = preg_replace("/(.gif|.jpg|.jpeg|.png)/i","",$toFile);

        switch($type) {
            case 1: if(imagegif($newImg, "$toFile$newName.gif"))
                return "$newName.gif"; break;
            case 2: if(imagejpeg($newImg, "$toFile$newName.jpg", $imgQuality))
                return "$newName.jpg"; break;
            case 3: if(imagepng($newImg, "$toFile$newName.png"))
                return "$newName.png"; break;
            default: if(imagejpeg($newImg, "$toFile$newName.jpg", $imgQuality))
                return "$newName.jpg"; break;
        }
        imagedestroy($newImg);
    }
    imagedestroy($img);
    return false;
}














?>
